package com.zhiyou100.api.book_demo.dao.impl;

import com.zhiyou100.api.book_demo.dao.BaseDao;
import com.zhiyou100.api.book_demo.dao.CategoryDao;
import com.zhiyou100.api.book_demo.pojo.BookInfo;
import com.zhiyou100.api.book_demo.pojo.Category;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;

/**
 * 具体实现图书类别操作的类
 */
public class CategoryDaoImpl implements CategoryDao {

    //将其作为属性
    static HashMap<Category, List<BookInfo>> booksMap = BaseDao.getBooksMap();

    /**
     * 查询全部图书类别
     *
     * @return 类别列表
     */
    @Override
    public List<Category> queryAll() {
        //获取图书类别列表
        Set<Category> categories = booksMap.keySet();
        List<Category> list = new ArrayList<>(categories);
        return list;
    }

    /**
     * 添加图书类别
     *
     * @param category 要添加的类别信息
     * @return 添加成功或失败
     */
    @Override
    public boolean insertCategory(Category category) {
        //为了保证类别的唯一，先验证此类别在booksMap中是否已经存在
        if (booksMap.containsKey(category)) {
            System.out.println("此类别信息已经存在");
            return false;
        } else {
            //如果类别信息不存在，我们需要将其添加到booksMap中
            booksMap.put(category, new ArrayList<>());
            return true;
        }
    }

    /**
     * 编辑图书类别(根据类别编号修改类别名称)
     *
     * @param category 要修改的信息
     * @return 修改结果
     */
    @Override
    public boolean editCategoryById(Category category) {
        //获取所有的类别信息
        Set<Category> categories = booksMap.keySet();
        for (Category category1 : categories) {
            //遍历全部类别信息，根据类别编号找到要修改的类别
            if (category1.getId().equals(category.getId())) {
//                category1.setName(category.getName());
                //如果找到对应类别，原类别移除，添加新的类别
                List<BookInfo> list = booksMap.get(category1);
                booksMap.remove(category1);
                booksMap.put(category, list);
                return true;
            }
        }
        return false;
    }
}
